#ifndef COMUNICACAO_SERVIDOR_H
#define COMUNICACAO_SERVIDOR_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netdb.h>
#include <arpa/inet.h>

#include "udp_socket_io.h"
#include "logica.h"

#ifndef MAX_FILMES
#define MAX_FILMES 200
#endif

#ifndef EXT
#define EXT ".csv"
#endif

#define MARCAR_TEMPOS_SERVIDOR
#ifdef MARCAR_TEMPOS_SERVIDOR
#define ARQ_TEMPO_SERVIDOR "tempo_servidor_"
#define NUM_CLIENTES 5
#include <string.h>
struct timeval t0_servidor, t1_servidor; /* Estruturas para marcar tempo */
unsigned short int portas[NUM_CLIENTES]; /* Porta de cada cliente */
FILE *fp_tempos_servidor[NUM_CLIENTES];  /* Apontadores para os arquivos */
#endif

/* Aguarda o pedido do cliente e envia os dados desejados */
int executa_sistema_servidor(int sockfd);

/* Envia todos os titulos dos filmes em ordem de ID para o cliente */
int enviar_titulos(int sockfd, struct sockaddr *to, socklen_t tolen);

/* Envia sinopse do filme com ID igual a 'idfilme' para o cliente */
int enviar_sinopse_filme(int sockfd, int idfilme, struct sockaddr *to, socklen_t tolen);

/* Envia todas as informacoes do filme com ID igual a 'idfilme'
   para o cliente */
int enviar_informacoes_filme(int sockfd, int idfilme, struct sockaddr *to, socklen_t tolen);

/* Envia todas as informacoes de todos os filmes para o cliente */
int enviar_tudo(int sockfd, struct sockaddr *to, socklen_t tolen);

/* Envia confirmacao do recebimento de uma nota */
int enviar_confirmacao_nota(int sockfd, int idfilme, int nota, struct sockaddr *to, socklen_t tolen);

/* Envia a nota media e o numero de clientes de um filme */
int enviar_nota_filme(int sockfd, int idfilme, struct sockaddr *to, socklen_t tolen);

#endif
